#ifndef __ESP32PCNTENCODER_H__
#define __ESP32PCNTENCODER_H__
#include "Arduino.h"
#include <driver/pcnt.h>
#include <hal/pcnt_hal.h>
#include <soc/pcnt_struct.h>

class Esp32PcntEncoder
{
public:
    //析构
	Esp32PcntEncoder() = default;
    //初始化脉冲计数器
	bool init(int pcntUnit, int pinA, int pinB);
    //过滤短时脉冲干扰
	bool setGlitchFilter(uint32_t max_glitch_us);
    //开始运行
	bool start();
    //重置编码器数字
	bool reset();
    //暂停计数
	bool stop();
    //获取脉冲数
	int32_t getTicks();
	//每次脉冲移动的距离
	bool setPeerPcntDistance(float peerPcntDistance);
    // 速度计算
	float getSpeed();

private:
    //A/B引脚
	int _pinA;
	int _pinB;
    //脉冲数
	int32_t _ticks{0};
    //每次脉冲移动的距离
	float _peerPcntDistance{0.1};
    //上次更新的时间
	uint32_t _lastUpdateSpeedTime;
    //上次更新的脉冲数
	int32_t _lastUpdateSpeedTick;

public:
    //脉冲单元
	pcnt_unit_t pcntUnit;
    //累加的脉冲数
	int accumu_count{0};
};

#endif // __ESP32PCNTENCODER_H__